- 地位,作用
- 注意事项
- 当shell script读取到一个Enter符号(CR)即尝试执行该命令
- 可以通过反斜杠转义回车来扩展到下一行
- 用#开头作为批注
- 执行方式
- 直接命令执行(绝对路径、相对路径、借助PATH变量)
- 以bash进程来执行(bash shell.sh 或 sh shell.sh)
- 利用source命令来执行
- 书写规范
- 第一行以#!/bin/bash声明该script所用的shell
- 设置好一些重要的环境变量如PATH何LANG,这样可以直接执行外部命令而无需写绝对路径
- 文件头注释包括
- 功能
- 版本信息
- 作者与联系方式
- 版权声明方式
- history
- 用exit命令退出程序,并回传一个值(成功运行为0)
- 数值运算
- $((............))
- 如:echo $(( 13 % 3 ))
- test命令
- 关于文件名的文件类型判断:test -e filename等
- -e:(常用)文件是否存在
- -f:(常用)是否存在且为文件
- -d:(常用)是否存在且为目录
- -b、-c、-S、-p、-L:略
- 关于文件的权限检测:test -r filename等
- -r:文件是否存在且有r权限
- -w:文件是否存在且有w权限
- -x:文件是否存在且有x权限
- -u:文件是否存在且有SUID属性
- -g:文件是否存在且有GUID属性
- -k:文件是否存在且有Sticky bit属性
- -s:文件是否存在且非空白文件
- 文件比较:test file1 -nt file2等
- -nt:(newer than)file1是否比file2新
- -ot:(older than)file1是否比file2旧
- -ef:file1和file2是否为同一文件(相同inode)
- 整数间判定:test n1 -eq n2等
- -eq:(equal)相等
- -ne:(not equal)不相等
- -gt:(greater than)大于
- -lt:(less than)小于
- -ge:(greater than or equal)大于等于
- -le:(less than or equal)小于等于
- 字符串间的判定:
- test -z string:是否为空字符串
- test -n string:是否为非空字符串
- test str1 = str2:是否相等
- test str1 != str2:是否不相等
- 多重条件判定:test -r filename -a -x filename等
- 判断式
- 省略了test,直接把参数放到中括号[]中
- 如:test -z "$HOME"
- [ -z "$HOME" ];
- 注意:
- 中括号内侧两端必须用空格隔开,和通配符和正则表达式作区分
- 变量最好用双引号""包含
- 常量最好用单或双引号包含
- 否则:
- name="VBird Tsai"
- [ $name == "VBird" ] 相当于 [ VBird Tsai == "VBird" ]
- 默认变量
- 如执行sh:/path/to/scriptname opt1 opt2 opt3 opt4
- 那么$0代表了/path/to/scriptname即sh文件的路径
- $1,$2,$3,$4代表了opt1,opt2,opt3,opt4
- $#:参数个数
- $@:所有参数(空格隔开)
- $*:代表字符串"$1c$2c$3c$4",其中c为分隔符,默认为空格
-
- shift语句:变量号码偏移
- 不带参数:变量号码左移1,即减1
- 带参数n:变量号码左移n,即减n
- 左移会舍弃左边的参数,如shift会舍弃原来的$1
- 条件判别式
- 形式
- if [ 条件判别式 ]; then
- ............
- fi
- 可以有多个条件判别式,之间可以使用逻辑连接符
- 多重判断
- if [ 条件判别式 ]; then
- .............
- elif [ 条件判别式 ]; then
- ............
- else
- .............
- fi
-
- 选择判断
- 形式
- case $变量 in
- "内容1")
- ........
- ;;
- "内容2")
- ........
- ;;
- *)
- .......
- ;;
- esac
- 内容后边有一个右括号
- 内容对应的动作之后又两个分号
- *代表了其他情况即default
- 自定义函数function
- 形式
- function fname() {
- ............
- }
- function内有内置变量
- $0表示函数名称即fname
- $1,$2,$3........表示第1,2,3......个变量
- 循环loop
- 形式1:当……
- while [ 条件判别式 ]
- do
- ..........
- done
- 形式2:直到……
- until [ 条件判别式 ]
- do
- ..........
- done
- 形式3:类似python
- for var in con1 con2 con3 ...
- do
- ...........
- done
-
- 第一次循环$var为con1
- 第二次循环$var为con2
- ……
- 形式4:(类似C语言,但是不能用i++)
- for ( ( 初始值; 限制值; 步长 ) )
- do
- ......
- done
- shell script的追踪和调试:sh
- 基本语法:sh [-nvx] script.sh
- -n:仅检查语法
- -v:执行脚本前先将脚本打印到屏幕上
- -x:追踪,将使用到的脚本内容打印到屏幕上